←Select platform

GetRowColumnCompressed(byte[],ushort[],int,int,int,int) Method

Summary
Retrieves a row (or part of a row) of 1-bit compressed data from an image that has been loaded in its compressed format.
Syntax
C#
Objective-C
C++/CLI
Java
Python
[CLSCompliantAttribute(false)] 
public int GetRowColumnCompressed( 
   byte[] workBuffer, 
   ushort[] runBuffer, 
   int runBufferOffset, 
   int row, 
   int column, 
   int width 
) 
- (NSInteger)getRowColumnCompressed:(unsigned char *)workBuffer  
                          runBuffer:(unsigned short *)runBuffer  
                                row:(NSInteger)row  
                             column:(NSInteger)column  
                              width:(NSUInteger)pixels  
                              error:(NSError **)error 
public int getRowColumnCompressed( 
  byte[] workBuffer,  
  short[] runBuffer,  
  int runBufferOffset,  
  int row,  
  int column,  
  int width 
            ) 
[CLSCompliantAttribute(false)] 
public: 
int GetRowColumnCompressed(  
   array<byte>^ workBuffer, 
   array<ushort>^ runBuffer, 
   int runBufferOffset, 
   int row, 
   int column, 
   int width 
)  
def GetRowColumnCompressed(self,workBuffer,runBuffer,runBufferOffset,row,column,width): 

Parameters

workBuffer
Optional work buffer. Allocating the work buffer speeds processing if you call this method more than once, because if you do not allocate a work buffer, the method allocates and frees a temporary buffer each time it is called. The size of this buffer should be the same as the BytesPerLine property. Pass a null reference to  runBuffer if you do not want to use a work buffer.

runBuffer
The output buffer, which will be filled with 1-bit compressed image data. Calculate the required size of this buffer as follows: bytes required = (Width + 3) * 2.

runBufferOffset
Index into  runBuffer where the get operation should start.

row
The number of the row to retrieve. The first row is 0, and the last row is 1 less than the image height.

column
The column offset within the row to retrieve. The first column offset is 0, and the last column offset is 1 less than the image width.

width
The number of pixels to retrieve.

Return Value

The number of pixels processed.

Remarks

This method is available in the (Document/Medical only).

This method is useful for working with 1-bit images that are loaded in their compressed formats for faster loading and display.

For more information, refer to Speeding Up 1-Bit Documents.

Example

This example demonstrates the low-level methods for accessing 1-bit compressed bitmap data. It demonstrates the ability to get and set partial rows, and the ability to process partial rows in buffer-to-buffer processing. The result of the method is an inverted rectangle in the middle of the image.

C#
using Leadtools; 
using Leadtools.Codecs; 
using Leadtools.ImageProcessing; 
using Leadtools.ImageProcessing.Core; 
using Leadtools.ImageProcessing.Color; 
using Leadtools.Dicom; 
using Leadtools.Drawing; 
using Leadtools.Controls; 
using Leadtools.Svg; 
 
 
public void GetRowColumnCompressedExample() 
{ 
	RasterCodecs codecs = new RasterCodecs(); 
	// Load the bitmap, at 1 bit per pixel, compressed 
	codecs.Options.Load.Compressed = true; 
	RasterImage image = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "OCR1.TIF"), 1, Leadtools.Codecs.CodecsLoadByteOrder.Bgr, 1, 1); 
 
	int xOffset;   // Column offset of the rectangle to process. 
	int xSize;     // Pixel width of the rectangle to process. 
	int yOffset;   // Row offset of the rectangle to process. 
	int ySize;     // Pixel height of the rectangle to process. 
	int i, n;       // Counters. 
 
	byte[] buffer;      // Buffer to hold the expanded row. 
	ushort[] runBuffer; // Buffer to hold the compressed row. 
	byte[] workBuffer;  // Work buffer. 
 
	// This example does not work with rotated view perspectives. 
	if ((image.ViewPerspective != RasterViewPerspective.TopLeft) || (image.ViewPerspective != RasterViewPerspective.BottomLeft)) 
		image.ChangeViewPerspective(RasterViewPerspective.TopLeft); 
 
	// Specify a rectangle in the middle right part of the displayed image. 
	xOffset = image.Width / 3; 
	xSize = image.Width - xOffset; 
	yOffset = image.Height / 3; 
	ySize = image.Height / 3; 
	// Adjust the YOffset if the view perspective is bottom left. 
	if (image.ViewPerspective == RasterViewPerspective.BottomLeft) 
	{ 
		yOffset = image.Height - yOffset - ySize; 
	} 
 
	if (image.IsGlobalMemory) 
		image.Access(); 
	// Allocate the buffers. 
	buffer = new Byte[(xSize + 7) / 8]; 
	runBuffer = new ushort[(xSize + 3) * 2]; 
	workBuffer = new Byte[image.BytesPerLine]; 
	// Invert the colors of pixels in the left half of the rectangle. 
	// Notice that we get the whole rectangle, but process only half of it. 
	for (i = yOffset; i < (yOffset + ySize); i++) 
	{ 
		image.GetRowColumnCompressed(workBuffer, runBuffer, 0, i, xOffset, xSize); 
		RasterRleCompressor.ExpandRow(runBuffer, buffer, 0, 0, xSize); 
		for (n = 0; n < (xSize / 16); n++) 
			buffer[n] ^= 0xFF; 
		RasterRleCompressor.CompressRow(runBuffer, buffer, 0, 0, xSize); 
		image.SetRowColumnCompressed(workBuffer, runBuffer, 0, i, xOffset, xSize); 
 
	} 
	if (image.IsGlobalMemory) 
		image.Release(); 
 
	codecs.Save(image, Path.Combine(LEAD_VARS.ImagesDir, "IMAGE1_getrowcolcompresed.BMP"), RasterImageFormat.Bmp, 0); 
 
	image.Dispose(); 
	codecs.Dispose(); 
} 
 
static class LEAD_VARS 
{ 
   public const string ImagesDir = @"C:\LEADTOOLS22\Resources\Images"; 
} 
Requirements

Target Platforms

Help Version 22.0.2023.5.16
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.

Leadtools Assembly

Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.